package br.com.beans;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.hibernate.Session;

import br.com.dominio.CPU;
import br.com.util.Conexão;

/**
 * Esta classe é responsável por carregar uma lista das CPU presentes no
 * projeto. Esta lista poderá ser manipulada ao dercorrer do projeto, mesmo que
 * a sessão seja fechada com o banco de dados.
 */

public class CPUList {

	private List<CPU> listaCpus = new ArrayList<CPU>();
	private List<String> listaNomeCpus = new ArrayList<String>();
	private Map<String, String> listaModeloCpus = new TreeMap<String, String>();
	private Map<String, String> listaFabricanteCpus = new TreeMap<String, String>();
	private Map<String, String> listaIPCpus = new TreeMap<String, String>();
	private Map<String, String> listaPartNumberCpus = new TreeMap<String, String>();

	// Abre uma conexão com o banco de dados
	private static Session sessao;

	@SuppressWarnings("unchecked")
	public CPUList() {

		try {

			if (sessao == null) {
				sessao = new Conexão().getSession();
				System.out.println("CPUList >> Sessão aberta com sucesso.");
			}
			else {
				System.out.println("CPUList >> Já existe sessão aberta");
			}
			this.listaCpus = sessao.createQuery("from CPU").list();

			int n = listaCpus.size();
			System.out.println("CPUList >> Retornando "
					+ n + " itens.");

		}
		catch (Exception e) {
			System.err.println("CPUList >> Erro no query "
					+ e);
		}
		finally {

			// sessao.close();

		}

		// Criando uma lista com os nomes das cpus, obtidos da pesquisa de
		// objetos
		for (CPU c : listaCpus) {

			this.listaNomeCpus.add(c.getIdCPU());
			this.listaModeloCpus.put(c.getIdCPU(), c.getModelo());
			this.listaFabricanteCpus.put(c.getIdCPU(), c.getFabricante());
			this.listaIPCpus.put(c.getIdCPU(), c.getIp());
			this.listaPartNumberCpus.put(c.getIdCPU(), c.getPartNumber());

		}

	}

	public List<CPU> getListaCpus() {
		return listaCpus;
	}

	public List<String> getListaNomeCpus() {
		return listaNomeCpus;
	}

	public Map<String, String> getListaModeloCpus() {
		return listaModeloCpus;
	}

	public Map<String, String> getListaFabricanteCpus() {
		return listaFabricanteCpus;
	}

	public Map<String, String> getListaIPCpus() {
		return listaIPCpus;
	}

	public Map<String, String> getListaPartNumberCpus() {
		return listaPartNumberCpus;
	}

}
